A storage system is a computer that provides storage service relating to the organization of information on writable persistent storage devices, such as memories, tapes or disks. The storage system is commonly deployed within a storage area network (SAN) or a network attached storage (NAS) environment. When used within a NAS environment, the storage system may be embodied as a file server including an operating system that implements a file system to logically organize the information as a hierarchical structure of directories and files on, e.g. the disks. Each “on-disk” file may be implemented as a set of data structures, e.g., disk blocks, configured to store information, such as the actual data for the file. A directory, on the other hand, may be implemented as a specially formatted file in which information about other files and directories are stored.
The storage system may be further configured to operate according to a client/server model of information delivery to thereby allow many client computers (clients) to access shared resources, such as files, stored on the storage system. Sharing of files is a hallmark of a NAS system, which is enabled because of its semantic level of access to files and file systems. Storage of information on a NAS system is typically deployed over a computer network comprising a geographically distributed collection of interconnected communication links, such as Ethernet, that allow clients to remotely access the information (files) on the filer. The clients typically communicate with the storage system by exchanging discrete packets or messages of data according to pre-defined protocols, such as the Transmission Control Protocol/Internet Protocol (TCP/IP).
In the client/server model, the client may comprise an application executing on a computer that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network, wide area network or virtual private network implemented over a public network, such as the Internet. Resources of the storage system that enable such connection with the client include a network protocol stack. The network protocol stack comprises layers of software, such as a session layer, a transport layer and a network layer. IP protocol is a network layer protocol that provides network addressing between computers, such as the client and storage system, whereas TCP is a transport layer protocol that creates a connection between processes of the computers that indicate a willingness to communicate.
Broadly stated, the connection provided by a transport layer, such as TCP, is a reliable, securable logical circuit between pairs of processes. A TCP process executing on the computers establishes the TCP connection in accordance with a conventional “3-way handshake” arrangement involving the exchange of TCP message or segment data structures. The resulting TCP connection is identified by port numbers and IP addresses of the computers. The TCP transport service provides reliable delivery of a message using a TCP transport header. The TCP protocol and establishment of a TCP connection are described in Computer Networks, 3rd Edition, particularly at pgs. 521-542, which is hereby incorporated by reference as though fully set forth herein.
The session layer manages the establishment or binding of an association between two communicating processes in the computers. In this context, the association is a session comprising a series of interactions between the two communicating processes for a period of time, e.g., during the span of a connection. Upon establishment of the connection, the processes take turn exchanging commands and data over the session, typically through the use of request and response messages in accordance with a pre-defined protocol.
NAS systems generally utilize file-based access protocols; therefore, each client may request the services of the storage system by issuing file system protocol messages (in the form of packets) to the file system over the network identifying one or more files to be accessed without regard to specific locations, e.g., blocks, in which the data are stored on disk. By supporting a plurality of file system protocols, such as the conventional Common Internet File System (CIFS), the Network File System (NFS) and the Direct Access File System (DAFS) protocols, the utility of the storage system may be enhanced for networking clients.
A SAN is a high-speed network that enables establishment of direct connections between a storage system and its storage devices. The SAN may thus be viewed as an extension to a storage bus and, as such, an operating system of the storage system enables access to stored information using block-based access protocols over the “extended bus”. In this context, the extended bus is typically embodied as Fibre Channel (FC) or Ethernet media adapted to operate with block access protocols, such as Small Computer Systems Interface (SCSI) protocol encapsulation over FC or TCP/IP/Ethernet.
A common type of file system is a “write in-place” file system, an example of which is the conventional Berkeley fast file system. In a write in-place file system, the locations of the data structures, such as inodes and data blocks, on disk are typically fixed. An inode is a data structure used to store information, such as metadata, about a file, whereas the data blocks are structures used to store the actual data for the file. The information contained in an inode may include, e.g., ownership of the file, access permission for the file, size of the file, file type and references to locations on disk of the data blocks for the file. The references to the locations of the file data are provided by pointers, which may further reference indirect blocks that, in turn, reference the data blocks, depending upon the quantity of data in the file. Changes to the inodes and data blocks are made “in-place” in accordance with the write in-place file system. If an update to a file extends the quantity of data for the file, an additional data block is allocated and the appropriate inode is updated to reference that data block.
Another type of file system is a write-anywhere file system that does not over-write data on disks. If a data block on disk is retrieved (read) from disk into memory and “dirtied” with new data, the data block is stored (written) to a new location on disk to thereby optimize write performance. A write-anywhere file system may initially assume an optimal layout such that the data is substantially contiguously arranged on disks. The optimal disk layout results in efficient access operations, particularly for sequential read operations, directed to the disks. An example of a write-anywhere file system that is configured to operate on a storage appliance is the Write Anywhere File Layout (WAFL®) file system available from Network Appliance, Inc. of Sunnyvale, Calif. The WAFL file system is implemented within a microkernel as part of the overall protocol stack of the filer and associated disk storage. This microkernel is supplied as part of Network Appliance's Data ONTAP™ storage operating system, residing on a storage system that processes file-service requests from network-attached clients.
As used herein, the term “storage operating system” generally refers to the computer-executable code operable on a storage system that manages data access and may, in case of a filer, implement file system semantics, such as the Data ONTAP™ storage operating system. The storage operating system can also be implemented as an application program operating over a general-purpose operating system, such as UNIX® or Windows XP®, or as a general-purpose operating system with configurable functionality, which is configured for storage applications as described herein.
Disk storage is typically implemented as one or more storage “volumes” that comprise physical storage disks, defining an overall logical arrangement of storage space. Currently available storage system implementations can serve a large number of discrete volumes. Each volume is associated with its own file system and, for purposes hereof, volume and file system shall generally be used synonymously. The disks within a volume are typically organized as one or more groups of Redundant Array of Independent (or Inexpensive) Disks (RAID). RAID implementations enhance the reliability/integrity of data storage through the writing of data “stripes” across a given number of physical disks in the RAID group, and the appropriate storing of parity information with respect to the striped data. In the example of a WAFL-based file system, a RAID 4 implementation is advantageously employed. This implementation specifically entails the striping of data across a group of disks, and separate parity storing within a selected disk of the RAID group. As described herein, a volume typically comprises at least one data disk and one associated parity disk (or possibly data/parity partitions in a single disk) arranged according to a RAID 4, or equivalent high-reliability, implementation.
Clients of a storage system utilizing the iSCSI protocol (SCSI encapsulated in TCP/IP) may desire to utilize a plurality of connections within a single iSCSI session with the system as defined in Request For Comments (RFC) 3720, entitled Internet Small Computer Systems Interface (iSCSI), dated April 2004, the contents of which are hereby incorporated by reference. According to the iSCSI protocol, an iSCSI session comprises one or more TCP connections that link an initiator to a target. An initiator may utilize any of the TCP connections within the session for transmitting data access operations to the target. Moreover, each TCP connection may use different initiator-side and/or client-side network interfaces. Thus, an initiator and/or target may take advantage of multiple distinct data paths within the iSCSI session, thereby improving availability and/or enabling bandwidth aggregation.
Each client typically utilizes a transport provider driver as an iSCSI session manager, wherein each iSCSI session is typically associated with exactly one transport provider driver. As such, all of the transport provider hardware that may be utilized for a single iSCSI session is managed by a single iSCSI session manager. Examples of trans-port provider hardware (and corresponding drivers) include network interface controllers (NICs), TCP/IP offload engines (TOEs) and iSCSI host bus adapters (HBAs). In known iSCSI systems, initiators and targets associate one iSCSI session manager for each type of transport provider hardware utilized. For example, a first iSCSI session manager may be associated with all NICs, a second iSCSI session manager may be associated with any TOEs and a third iSCSI session manager may be associated with any iSCSI HBAs.
In such iSCSI systems, however, an iSCSI session is prevented from spanning connections having differing characteristics, such as different levels of acceleration. As used herein, the term “different levels of acceleration” denotes different types of transport provider hardware, software and firmware (or combinations thereof) that utilize differing models of operation to perform their tasks. Initiators may open multiple sessions, each of which may use one of the levels of acceleration and/or data transmission speeds; yet, a noted disadvantage of such an arrangement involves additional complications that arise due to the need to manage multiple sessions and the use of a plurality of iSCSI session managers.